home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / Libraries / SAT 2.3a1 / Collision][ ƒ / sMrEgghead.p < prev   
Encoding:
Text File  |  1994-11-02  |  1.7 KB  |  77 lines  |  [TEXT/PJMM]

  1. { Player sprite for SATcollision][ }
  2.  
  3. unit sMrEgghead;
  4.  
  5. interface
  6.  
  7.     uses
  8. {$ifc UNDEFINED THINK_PASCAL}
  9.         Types, QuickDraw, Events, {}
  10. {$endc}
  11.         SAT;
  12.  
  13.     var
  14.         mrEggheadFaces: array[0..3] of FacePtr;
  15.         yuckFace: FacePtr;
  16.  
  17.     procedure InitMrEgghead;
  18.     procedure SetupMrEgghead (me: SpritePtr);
  19.     procedure HandleMrEgghead (me: SpritePtr);
  20.     procedure HitMrEgghead (me, him: SpritePtr);
  21.  
  22. implementation
  23.  
  24.     procedure InitMrEgghead;
  25.         var
  26.             i: integer;
  27.     begin
  28.         for i := 0 to 3 do
  29.             mrEggheadFaces[i] := SATGetFace(128 + i);
  30.         yuckFace := SATGetFace(134);
  31.     end;
  32.  
  33.     procedure SetupMrEgghead (me: SpritePtr);
  34.     begin
  35.         me^.mode := 0;
  36.         me^.speed.h := 1;
  37.         me^.kind := 1; {Friend kind}
  38.         SetRect(me^.hotRect, 0, 0, 32, 32);
  39.         me^.task := @HandleMrEgghead;
  40.         me^.hitTask := @HitMrEgghead;
  41.     end;
  42.  
  43.     procedure HandleMrEgghead (me: SpritePtr);
  44.     begin
  45.         GetMouse(me^.position);
  46.  
  47. {This time, let's make sure Mr Egghead is always visible!}
  48.         if me^.position.v < 0 then
  49.             me^.position.v := 0;
  50.         if me^.position.h < 0 then
  51.             me^.position.h := 0;
  52.         if me^.position.v > gSAT.offSizeV - 32 then
  53.             me^.position.v := gSAT.offSizeV - 32;
  54.         if me^.position.h > gSAT.offSizeH - 32 then
  55.             me^.position.h := gSAT.offSizeH - 32;
  56.  
  57.         if me^.mode < 0 then {we have taken a bite in a bad apple recently}
  58.             begin
  59.                 me^.face := yuckFace;
  60.                 me^.mode := me^.mode + 1;
  61.             end
  62.         else if me^.mode = 0 then {nothing special recently}
  63.             me^.face := mrEggheadFaces[2]
  64.         else
  65.             begin {ate an apple recently - chew!}
  66.                 me^.mode := me^.mode - 1;
  67.                 me^.face := mrEggheadFaces[me^.mode mod 4];
  68.             end;
  69.     end;
  70.  
  71.     procedure HitMrEgghead;
  72.     begin
  73. {Hit something! We can take whatever action we need here, but in this case, we let sApple decide.}
  74. {(We could have omitted this function altogether and passed nil.)}
  75.     end;
  76.  
  77. end.